home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / include / linux / usb / cdc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  6.8 KB  |  246 lines

  1. /*
  2.  * USB Communications Device Class (CDC) definitions
  3.  *
  4.  * CDC says how to talk to lots of different types of network adapters,
  5.  * notably ethernet adapters and various modems.  It's used mostly with
  6.  * firmware based USB peripherals.
  7.  */
  8.  
  9. #ifndef __LINUX_USB_CDC_H
  10. #define __LINUX_USB_CDC_H
  11.  
  12. #define USB_CDC_SUBCLASS_ACM            0x02
  13. #define USB_CDC_SUBCLASS_ETHERNET        0x06
  14. #define USB_CDC_SUBCLASS_WHCM            0x08
  15. #define USB_CDC_SUBCLASS_DMM            0x09
  16. #define USB_CDC_SUBCLASS_MDLM            0x0a
  17. #define USB_CDC_SUBCLASS_OBEX            0x0b
  18.  
  19. #define USB_CDC_PROTO_NONE            0
  20.  
  21. #define USB_CDC_ACM_PROTO_AT_V25TER        1
  22. #define USB_CDC_ACM_PROTO_AT_PCCA101        2
  23. #define USB_CDC_ACM_PROTO_AT_PCCA101_WAKE    3
  24. #define USB_CDC_ACM_PROTO_AT_GSM        4
  25. #define USB_CDC_ACM_PROTO_AT_3G            5
  26. #define USB_CDC_ACM_PROTO_AT_CDMA        6
  27. #define USB_CDC_ACM_PROTO_VENDOR        0xff
  28.  
  29. /*-------------------------------------------------------------------------*/
  30.  
  31. /*
  32.  * Class-Specific descriptors ... there are a couple dozen of them
  33.  */
  34.  
  35. #define USB_CDC_HEADER_TYPE        0x00    /* header_desc */
  36. #define USB_CDC_CALL_MANAGEMENT_TYPE    0x01    /* call_mgmt_descriptor */
  37. #define USB_CDC_ACM_TYPE        0x02    /* acm_descriptor */
  38. #define USB_CDC_UNION_TYPE        0x06    /* union_desc */
  39. #define USB_CDC_COUNTRY_TYPE        0x07
  40. #define USB_CDC_NETWORK_TERMINAL_TYPE    0x0a    /* network_terminal_desc */
  41. #define USB_CDC_ETHERNET_TYPE        0x0f    /* ether_desc */
  42. #define USB_CDC_WHCM_TYPE        0x11
  43. #define USB_CDC_MDLM_TYPE        0x12    /* mdlm_desc */
  44. #define USB_CDC_MDLM_DETAIL_TYPE    0x13    /* mdlm_detail_desc */
  45. #define USB_CDC_DMM_TYPE        0x14
  46. #define USB_CDC_OBEX_TYPE        0x15
  47.  
  48. /* "Header Functional Descriptor" from CDC spec  5.2.3.1 */
  49. struct usb_cdc_header_desc {
  50.     __u8    bLength;
  51.     __u8    bDescriptorType;
  52.     __u8    bDescriptorSubType;
  53.  
  54.     __le16    bcdCDC;
  55. } __attribute__ ((packed));
  56.  
  57. /* "Call Management Descriptor" from CDC spec  5.2.3.2 */
  58. struct usb_cdc_call_mgmt_descriptor {
  59.     __u8    bLength;
  60.     __u8    bDescriptorType;
  61.     __u8    bDescriptorSubType;
  62.  
  63.     __u8    bmCapabilities;
  64. #define USB_CDC_CALL_MGMT_CAP_CALL_MGMT        0x01
  65. #define USB_CDC_CALL_MGMT_CAP_DATA_INTF        0x02
  66.  
  67.     __u8    bDataInterface;
  68. } __attribute__ ((packed));
  69.  
  70. /* "Abstract Control Management Descriptor" from CDC spec  5.2.3.3 */
  71. struct usb_cdc_acm_descriptor {
  72.     __u8    bLength;
  73.     __u8    bDescriptorType;
  74.     __u8    bDescriptorSubType;
  75.  
  76.     __u8    bmCapabilities;
  77. } __attribute__ ((packed));
  78.  
  79. /* capabilities from 5.2.3.3 */
  80.  
  81. #define USB_CDC_COMM_FEATURE    0x01
  82. #define USB_CDC_CAP_LINE    0x02
  83. #define USB_CDC_CAP_BRK    0x04
  84. #define USB_CDC_CAP_NOTIFY    0x08
  85.  
  86. /* "Union Functional Descriptor" from CDC spec 5.2.3.8 */
  87. struct usb_cdc_union_desc {
  88.     __u8    bLength;
  89.     __u8    bDescriptorType;
  90.     __u8    bDescriptorSubType;
  91.  
  92.     __u8    bMasterInterface0;
  93.     __u8    bSlaveInterface0;
  94.     /* ... and there could be other slave interfaces */
  95. } __attribute__ ((packed));
  96.  
  97. /* "Country Selection Functional Descriptor" from CDC spec 5.2.3.9 */
  98. struct usb_cdc_country_functional_desc {
  99.     __u8    bLength;
  100.     __u8    bDescriptorType;
  101.     __u8    bDescriptorSubType;
  102.  
  103.     __u8    iCountryCodeRelDate;
  104.     __le16    wCountyCode0;
  105.     /* ... and there can be a lot of country codes */
  106. } __attribute__ ((packed));
  107.  
  108. /* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */
  109. struct usb_cdc_network_terminal_desc {
  110.     __u8    bLength;
  111.     __u8    bDescriptorType;
  112.     __u8    bDescriptorSubType;
  113.  
  114.     __u8    bEntityId;
  115.     __u8    iName;
  116.     __u8    bChannelIndex;
  117.     __u8    bPhysicalInterface;
  118. } __attribute__ ((packed));
  119.  
  120. /* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */
  121. struct usb_cdc_ether_desc {
  122.     __u8    bLength;
  123.     __u8    bDescriptorType;
  124.     __u8    bDescriptorSubType;
  125.  
  126.     __u8    iMACAddress;
  127.     __le32    bmEthernetStatistics;
  128.     __le16    wMaxSegmentSize;
  129.     __le16    wNumberMCFilters;
  130.     __u8    bNumberPowerFilters;
  131. } __attribute__ ((packed));
  132.  
  133. /* "Telephone Control Model Functional Descriptor" from CDC WMC spec 6.3..3 */
  134. struct usb_cdc_dmm_desc {
  135.     __u8    bFunctionLength;
  136.     __u8    bDescriptorType;
  137.     __u8    bDescriptorSubtype;
  138.     __u16    bcdVersion;
  139.     __le16    wMaxCommand;
  140. } __attribute__ ((packed));
  141.  
  142. /* "MDLM Functional Descriptor" from CDC WMC spec 6.7.2.3 */
  143. struct usb_cdc_mdlm_desc {
  144.     __u8    bLength;
  145.     __u8    bDescriptorType;
  146.     __u8    bDescriptorSubType;
  147.  
  148.     __le16    bcdVersion;
  149.     __u8    bGUID[16];
  150. } __attribute__ ((packed));
  151.  
  152. /* "MDLM Detail Functional Descriptor" from CDC WMC spec 6.7.2.4 */
  153. struct usb_cdc_mdlm_detail_desc {
  154.     __u8    bLength;
  155.     __u8    bDescriptorType;
  156.     __u8    bDescriptorSubType;
  157.  
  158.     /* type is associated with mdlm_desc.bGUID */
  159.     __u8    bGuidDescriptorType;
  160.     __u8    bDetailData[0];
  161. } __attribute__ ((packed));
  162.  
  163. /* "OBEX Control Model Functional Descriptor" */
  164. struct usb_cdc_obex_desc {
  165.     __u8    bLength;
  166.     __u8    bDescriptorType;
  167.     __u8    bDescriptorSubType;
  168.  
  169.     __le16    bcdVersion;
  170. } __attribute__ ((packed));
  171.  
  172. /*-------------------------------------------------------------------------*/
  173.  
  174. /*
  175.  * Class-Specific Control Requests (6.2)
  176.  *
  177.  * section 3.6.2.1 table 4 has the ACM profile, for modems.
  178.  * section 3.8.2 table 10 has the ethernet profile.
  179.  *
  180.  * Microsoft's RNDIS stack for Ethernet is a vendor-specific CDC ACM variant,
  181.  * heavily dependent on the encapsulated (proprietary) command mechanism.
  182.  */
  183.  
  184. #define USB_CDC_SEND_ENCAPSULATED_COMMAND    0x00
  185. #define USB_CDC_GET_ENCAPSULATED_RESPONSE    0x01
  186. #define USB_CDC_REQ_SET_LINE_CODING        0x20
  187. #define USB_CDC_REQ_GET_LINE_CODING        0x21
  188. #define USB_CDC_REQ_SET_CONTROL_LINE_STATE    0x22
  189. #define USB_CDC_REQ_SEND_BREAK            0x23
  190. #define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS    0x40
  191. #define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER    0x41
  192. #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER    0x42
  193. #define USB_CDC_SET_ETHERNET_PACKET_FILTER    0x43
  194. #define USB_CDC_GET_ETHERNET_STATISTIC        0x44
  195.  
  196. /* Line Coding Structure from CDC spec 6.2.13 */
  197. struct usb_cdc_line_coding {
  198.     __le32    dwDTERate;
  199.     __u8    bCharFormat;
  200. #define USB_CDC_1_STOP_BITS            0
  201. #define USB_CDC_1_5_STOP_BITS            1
  202. #define USB_CDC_2_STOP_BITS            2
  203.  
  204.     __u8    bParityType;
  205. #define USB_CDC_NO_PARITY            0
  206. #define USB_CDC_ODD_PARITY            1
  207. #define USB_CDC_EVEN_PARITY            2
  208. #define USB_CDC_MARK_PARITY            3
  209. #define USB_CDC_SPACE_PARITY            4
  210.  
  211.     __u8    bDataBits;
  212. } __attribute__ ((packed));
  213.  
  214. /* table 62; bits in multicast filter */
  215. #define    USB_CDC_PACKET_TYPE_PROMISCUOUS        (1 << 0)
  216. #define    USB_CDC_PACKET_TYPE_ALL_MULTICAST    (1 << 1) /* no filter */
  217. #define    USB_CDC_PACKET_TYPE_DIRECTED        (1 << 2)
  218. #define    USB_CDC_PACKET_TYPE_BROADCAST        (1 << 3)
  219. #define    USB_CDC_PACKET_TYPE_MULTICAST        (1 << 4) /* filtered */
  220.  
  221.  
  222. /*-------------------------------------------------------------------------*/
  223.  
  224. /*
  225.  * Class-Specific Notifications (6.3) sent by interrupt transfers
  226.  *
  227.  * section 3.8.2 table 11 of the CDC spec lists Ethernet notifications
  228.  * section 3.6.2.1 table 5 specifies ACM notifications, accepted by RNDIS
  229.  * RNDIS also defines its own bit-incompatible notifications
  230.  */
  231.  
  232. #define USB_CDC_NOTIFY_NETWORK_CONNECTION    0x00
  233. #define USB_CDC_NOTIFY_RESPONSE_AVAILABLE    0x01
  234. #define USB_CDC_NOTIFY_SERIAL_STATE        0x20
  235. #define USB_CDC_NOTIFY_SPEED_CHANGE        0x2a
  236.  
  237. struct usb_cdc_notification {
  238.     __u8    bmRequestType;
  239.     __u8    bNotificationType;
  240.     __le16    wValue;
  241.     __le16    wIndex;
  242.     __le16    wLength;
  243. } __attribute__ ((packed));
  244.  
  245. #endif /* __LINUX_USB_CDC_H */
  246.